import axios from "axios";
import { ElMessage } from 'element-plus';
import router from '@/router';

const request = axios.create({
    baseURL: '/api',
});

// 添加请求拦截器
request.interceptors.request.use(function (config) {
    // 从localStorage获取token，添加到请求头
    const token = localStorage.getItem("Authorization");
    if (token) {
        config.headers.Authorization = token;
    }

    return config;
}, function (error) {
    // 对请求错误做些什么
    console.error('请求拦截器错误:', error);
    return Promise.reject(error);
});

// 添加响应拦截器
request.interceptors.response.use(function (response) {
    console.log('响应拦截器 - 原始响应:', response);

    // 检查是否有新的token需要更新
    const newToken = response.headers['new-token'];
    if (newToken) {
        // 更新localStorage中的token
        localStorage.setItem('Authorization', newToken);
        console.log('Token refreshed');
    }

    // 处理特殊情况：字符串响应
    if (typeof response.data === 'string') {
        console.log('响应拦截器 - 字符串响应:', response.data);
        // 将字符串响应转换为标准格式
        const originalData = response.data;
        if (originalData.includes('成功')) {
            response.data = {
                code: 200,
                message: originalData,
                data: null
            };
        } else {
            response.data = {
                code: 500,
                message: originalData,
                data: null
            };
        }
    }

    // 检查响应状态码
    if (response.data && response.data.code !== undefined) {
        console.log('响应拦截器 - 响应码:', response.data.code, '消息:', response.data.message);
        if (response.data.code === 200) {
            // 成功响应
            console.log('响应拦截器 - 成功响应，返回数据');
            return response;
        } else if (response.data.code === 401) {
            // 未授权
            console.log('响应拦截器 - 401未授权');
            localStorage.removeItem('Authorization');
            ElMessage.error(response.data.message || '登录已过期，请重新登录');
            router.push('/login');
            return Promise.reject(new Error(response.data.message || '未授权'));
        } else {
            // 其他业务错误
            console.log('响应拦截器 - 业务错误:', response.data.code, response.data.message);
            ElMessage.error(response.data.message || '操作失败');
            return Promise.reject(new Error(response.data.message || '操作失败'));
        }
    }

    console.log('响应拦截器 - 直接返回响应');
    return response;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    console.error('响应错误:', error);

    // 对响应错误做点什么
    if (error.response) {
        const backendMsg = error.response.data?.message || (typeof error.response.data === 'string' ? error.response.data : '');
        if (error.response.status === 401) {
            localStorage.removeItem('Authorization');
            ElMessage.error(backendMsg || '登录已过期，请重新登录');
            router.push('/login');
        } else if (error.response.status === 403) {
            ElMessage.error(backendMsg || '权限不足，无法访问');
        } else if (error.response.status === 400) {
            ElMessage.error(backendMsg || '请求参数错误，请检查输入');
        } else {
            ElMessage.error(backendMsg || '服务器错误');
        }
    } else if (error.request) {
        ElMessage.error('网络连接失败，请检查网络');
    } else {
        ElMessage.error('请求错误: ' + error.message);
    }
    return Promise.reject(error);
});

// 导出request模块
export default request;